package cap6;

class  Tabla {
	protected Object[] T;
	//Constructor
	public Tabla(int max){
		T = new Object[max];}
	//Comandos
	public void insertar(Object elem, int p) {
		/*Asigna elem a la posicion p, requiere que p sea válida y esté libre */
		T[p] = elem;}
	public void eliminar(int p){
		/*Elimina el elemento de la posicion p, requiere que p sea una posición válida*/
		T[p] = null;}
	//Consultas
	public int maxElem(){
		return T.length;}
	public int cantElem(){
		//Retorna la cantidad de referencias ligadas
		int cant=0;
		for (int i=0; i<=T.length;i++)
			if (T[i] != null)cant++;
		return cant;}
	public boolean posicionOcupada(int i){
		return T[i] != null;}
	public boolean hayPosicionOcupads(){
		/*Retorna true sí y solo sí al menos una referencia está ligada*/
		int i = 0; boolean hay=false; 
		while (i < T.length && !hay){
			if (T[i] != null)hay = true ;
			i++;}
		return hay;}
	public boolean estaLlena(){
		int i = 0; boolean hay=false; 
		while (i < T.length && !hay){
			if (T[i] == null) hay = true ;
			i++;}
		return !hay;}
	public boolean estaElemento(Object elem){
		/*Retorna true sí y solo si existe una posición ligada a elem*/
		int i = 0; boolean esta=false; 
		while (i < T.length && !esta){
			if (T[i] != null)
				esta = elem == T[i] ;
			i++;}
		return esta;}
	public boolean existePosicion (int p) {
		/*Retorna true sí y solo sí p denota una posición válida de la tabla*/
		return p >= 0 && p < T.length;}
	public Object recuperarElemento(int p) {

		/* Retorna el elemento que ocupa la posición p en la tabla Requiere que p sea una posición válida*/
		return T[p];}
}
